
import pandas as pd

## 打开data.txt文件, 读取每一行出来存到数组里
datas = []
# f = open("data.txt", "r")
# datas = f.readlines()
# f.close()

## 改成从EXCEL文件: digital.20250903-2.xlsx 中读取.其中第一例是时间, 第二列信号是0或者1.时间的单位是秒, 需要转成纳秒, 再用下一行的时间减去当前行的时间, 作为当前行的耗时.耗时不保留小数.再按照这个格式拼接起来: 耗时\t信号\n, 写入datas中



## 改成从EXCEL文件: digital.20250903-2.xlsx 中读取.其中第一例是时间, 第二列信号是0或者1.
# 时间的单位是秒, 需要转成纳秒, 再用下一行的时间减去当前行的时间, 作为当前行的耗时.
# 耗时不保留小数.再按照这个格式拼接起来: 耗时\t信号\n, 写入datas中

# 读取Excel文件
df = pd.read_excel('digital.20250903-2.xlsx', sheet_name='digital')

# 提取时间和信号列
times = df.iloc[:, 0]  # 第一列是时间
signals = df.iloc[:, 1]  # 第二列是信号

# 将时间转换为纳秒并计算时间差
# times_ns = (times * 1_000_000).astype(int)  # 转换为纳秒并取整
# time_diffs = times_ns.diff().fillna(0).astype(int)  # 计算时间差，第一行设为0
# 将时间转换为纳秒并计算时间差（使用下一行时间减去当前行时间）
times_ns = (times * 1_000_000).astype(int)  # 转换为纳秒并取整
time_diffs = times_ns.shift(-1) - times_ns  # 下一行时间减去当前行时间
time_diffs = time_diffs.fillna(0).astype(int)  # 最后一行设为0，并确保为整数类型


# 格式化为字符串列表
datas = [f"{time_diff}\t{signal}" for time_diff, signal in zip(time_diffs, signals)]

print(datas)



ss = {}

signals = []
signals2 = []

signals3 = []
datadict = {}

for i in range(len(datas)) :
    data = datas[i]
    ## 先去掉末尾的\n
    data = data.rstrip('\n')
    ## data的格式是769\t1\n,拆成键值对
    key, value = data.split('\t')
    datadict[key] = value
    ## 几种情况:
    ## key 时长: 1.大于14000 2.大于7000,  3.大于700, 或者 4.小于300
    t = int(float(key))
    b = False
    if int(value) == 0 :
        b = False
    else :
        b = True
    if t > 14000 :
        ## 暂时只处理第一个信号
        ##break
        print("NEXT COMMAND")
        
        signals3.append(signals2)

        signals2 = []
        signals = []
    elif t > 6000 :
        ## 结束一个信号
        ## 要填多少个0进去 32个
        if len(signals) > 50 :
            # for i in range(1, 32) :
            #     signals.append(0)
            # #print(len(signals), signals)
            signals2.append(signals)
            # signals2 = signals
        signals = []
    # elif t > 1000 :
    #     ## 异常数据来的
    #     signals = []
    elif t > 500 :
        ## 添加一个信号
        if b :
            signals.append(1)
            signals.append(1)
            signals.append(1)
        else :
            signals.append(0)
            signals.append(0)
            signals.append(0)
    elif t > 100 :
        ## 添加一个信号
        if b :
            signals.append(1)
        else :
            signals.append(0)


## 把signals的数据写入文件
f = open("signals.txt", "a")
## f.write("\n".join(map(str, signals)))
# for x in signals2 :
#     # if len(x) == 124 :
#     #     f.write("\n\n" + str(x))
#     f.write("\n\n" + str(x))
    #print(x)
## f.write(str(signals2))

writestrs = []
aaa = []
for x in signals3 :
    ## f.write("\n\n*****************************************" )
    writestrs.append("\n\n*****************************************" )
    aaa = []
    for y in x :
        s = str(y)
        s = s.replace("[", "")
        s = s.replace("]", "")
        s = s.replace(", ", "")
        ## f.write("\n" + s )
        aaa.append("\n" + s )
    ### aaa按长度排序
    # aaa.sort(key=len)
    writestrs.extend(aaa)

# f.write(writestrs)
for z in writestrs :
    f.write(z)
f.close()

# for x in signals2 :
#     print(len(x))

# print(datadict)


# 统计len(x)各个结果出现的频率次数
length_count = {}  # 用于存储长度及其出现次数的字典

for x in signals2 :
    length = len(x)
    #print(length)
    # 统计频率
    if length in length_count:
        length_count[length] += 1
    else:
        length_count[length] = 1

# 输出统计结果
print("\n长度统计结果:")
print("长度\t出现次数")
print("----------------")
for length in sorted(length_count.keys()):
    print(f"{length}\t{length_count[length]}")

# 也可以按出现次数排序输出
print("\n按出现次数排序:")
print("长度\t出现次数")
print("----------------")
for length, count in sorted(length_count.items(), key=lambda item: item[1], reverse=True):
    print(f"{length}\t{count}")

# 计算总信号组数
total_signals = len(signals2)
print(f"\n总信号组数: {total_signals}")

# 计算平均长度
if total_signals > 0:
    avg_length = sum(len(x) for x in signals2) / total_signals
    print(f"平均长度: {avg_length:.2f}")



## 分析

f = open("oks.txt", "w")

print(len(signals3))
idx = 1
for a in signals3 :
    print("**", idx, "**************************************")
    ## 标准长度129
    yy = []
    for y in a :
        if len(y) == 129 :
            ## OK的
            ## yy.append(y)
            yy.append(y)
    right = []
    temps = {}
    for b in a :
        ## 判断数组里的值是否与另一个数组里的值完全相同
        cnt = 0
        for c in a :
            if b == c :
                cnt += 1
        temps[str(b)] = cnt

    ## 取cnt最大的那一个
    for k, v in temps.items() :
        if v == max(temps.values()) :
            right = k
    
    s = str(right)
    s = s.replace("[", "")
    s = s.replace("]", "")
    s = s.replace(", ", "")
    f.write(s + "\n")
    idx += 1

f.close()